package persistencia;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;


import modeloDatos.Equipo;
import persistencia.ConnectionManager;

public class JDBCEquiposDAO {
	
	private Connection conn;
	
	public JDBCEquiposDAO() { 	
    }	
	
	public void finalize(){
        ConnectionManager.getInstance().checkIn(conn);
    }
	
	public void borrarEquipo(String ident){
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "DELETE FROM Equipos WHERE codigo_equipo=?";
		try{
			stmt = conn.prepareStatement(sql);
			stmt.setString(1, ident);
			stmt.executeUpdate();
		}catch(SQLException e){
			System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
		}finally{
        	finalize();
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }		
		}
	}
	
	public Equipo getEquipo(String ident){
		Equipo eq = null;
		
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "SELECT * FROM Equipos WHERE codigo_equipo=?";
		try{
			stmt = conn.prepareStatement(sql);
			stmt.setString(1, ident);
			
			ResultSet rs = stmt.executeQuery();
			if(rs.next()){
			String codigo = rs.getString("codigo_equipo");
			String IP = rs.getString("IP");
			String asignado = rs.getString("asignado_a");
			String descripcion = rs.getString("descripcion");
			eq = new Equipo(codigo,IP,asignado,descripcion);
			}
			
		}catch(SQLException e){
			System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
		}finally{
        	finalize();
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }		
		}
		
		return eq;
	}
	
	public List<Equipo> getEquipos(){
		List<Equipo> equipos = new ArrayList<Equipo>();
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;
		String sql = "SELECT * FROM Equipos";
		try{
			stmt = conn.prepareStatement(sql);
			ResultSet rs = stmt.executeQuery();
			while(rs.next()){
				String codigo = rs.getString("codigo_equipo");
				String IP = rs.getString("IP");
				String asignado = rs.getString("asignado_a");
				String descripcion = rs.getString("descripcion");
				Equipo eq = new Equipo(codigo,IP,asignado,descripcion);
				equipos.add(eq);
			}
			
		}catch(SQLException e){
			System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
		}finally{
        	finalize();
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }		
		}
		return equipos;
	}

	public int insertarEquipo(String codigo, String IP,String asignado, String descripcion){
		conn = ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt = null;

		String sql = "INSERT INTO Equipos (id_equipo,codigo_equipo,IP,asignado_a,descripcion) VALUES (NULL,?,?,?,?)";
		try{
			stmt = conn.prepareStatement(sql);
			stmt.setString(1, codigo);
			stmt.setString(2, IP);
			stmt.setString(3, asignado);
			stmt.setString(4, descripcion);
			
			stmt.execute();
		}catch(SQLException e){
			System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
            return 1;
		}finally {
        	finalize();
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
        }
		return 0;
	}
	

}
